/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.service;

import com.model.domain.dinero.ConglomeradoPersonalDetalle;
import com.model.domain.dinero.ConglomeradoPersonalResumen;
import com.model.domain.dinero.Partida;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import util.www.jdbc.OperadorResulSet;
import util.www.jdbc.SelectJdbc;
import util.www.sql.RegistroSql;
import util.www.sql.SentenciaSql;
import util.www.sql.TipoSentenciaSql;
import util.www.sql.WhereSql;

/**
 *
 * @author Rdelacruz
 */
public class ConglomeradoPersonalDetalleService
extends AbstractService
{    
    public void setearDetalle(Connection con, final ConglomeradoPersonalResumen comando) throws SQLException {
        SelectJdbc select = new SelectJdbc();
        select.setSelect("select D.*,P.EsDiario");
        select.setFrom("from Campo_Conglomerado_Personal_Detalle D");
        select.setJoin("inner join Partida P\n" +
"	on D.CodPartida = P.CodPartida");
        
        WhereSql w = new WhereSql();
        w.and("conglome=",comando.getConglomerado().getCodigo());
        w.and("dni=",comando.getPersonal().getDni());
        w.and("periodoTrabajo=",comando.getPeriodoTrabajo().getCodigo());
        w.and("activo=",1);
        select.setWhereHaving(w.getSql()); 
        
        final List<ConglomeradoPersonalDetalle> lista = new ArrayList<ConglomeradoPersonalDetalle>();        
        
        select.ejecutarTodo(con, new OperadorResulSet() {
            @Override
            public void operar(Connection con, ResultSet rs) throws SQLException {
                ConglomeradoPersonalDetalle obj = new ConglomeradoPersonalDetalle();
                        
                Partida p = new Partida();
                p.setCodigo(rs.getString("CodPartida"));
                
                obj.setMontoDiario(rs.getInt("Monto_Diario"));
                obj.setNroDias(rs.getInt("Nro_Dias"));
                obj.setMontoDiario(rs.getInt("Monto_Diario"));
                obj.setPartida(p);
                    
                boolean esDiario = rs.getBoolean("EsDiario");
                if(esDiario) {                  
                    comando.setPartidaDiaria(obj);
                }
                else {
                    lista.add(obj);
                }
            }
        });        
        
        comando.setPartidasNoDiarias(lista);              
    }   
    
    public void eliminar_detalle(Connection con, ConglomeradoPersonalResumen comando) throws SQLException {
        Statement st = null;
        try {
            st = con.createStatement();            
            String sql = "delete from Campo_Conglomerado_Personal_Detalle"
                    + " where conglome='"+comando.getConglomerado().getCodigo()+"'"
                    + " and dni='"+comando.getPersonal().getDni()+"'"
                    + " and periodoTrabajo='"+comando.getPeriodoTrabajo().getCodigo()+"'"
            ;
            st.executeUpdate(sql);            
        } finally {            
            if(st!=null) st.close();
        }     
    }
    
    public void guardar_actualizar_detalle(Connection con, ConglomeradoPersonalResumen comando) throws SQLException {
        //DESACTIVANDO LAS PARTIDAS EXISTENTES
        Statement st = null;
        try {
            st = con.createStatement();            
            String sql = "update Campo_Conglomerado_Personal_Detalle set activo=0"
                    + " where conglome='"+comando.getConglomerado().getCodigo()+"'"
                    + " and dni='"+comando.getPersonal().getDni()+"'"
                    + " and periodoTrabajo='"+comando.getPeriodoTrabajo().getCodigo()+"'"
            ;
            //System.out.println("SQL="+sql);
            st.executeUpdate(sql);            
        } finally {            
            if(st!=null) st.close();
        }

        //GUARDANDO PARTIDA DIARIA
        guardar_actualizar(con, comando.getPartidaDiaria());

        //GUARDANDO PARTIDAS NO DIARIAS
        for(ConglomeradoPersonalDetalle cpd : comando.getPartidasNoDiarias()) {
            guardar_actualizar(con, cpd);
        }
    }
    
    public void guardar_actualizar(Connection con, ConglomeradoPersonalDetalle comando) throws SQLException {
        
        ConglomeradoPersonalResumen cpr = comando.getConglomeradoPersonalResumen();
        
        RegistroSql r = new RegistroSql("Campo_Conglomerado_Personal_Detalle");
        r.agregarClave("conglome", cpr.getConglomerado().getCodigo());
        r.agregarClave("dni", cpr.getPersonal().getDni());
        r.agregarClave("periodoTrabajo", cpr.getPeriodoTrabajo().getCodigo());
        r.agregarClave("codPartida", comando.getPartida().getCodigo());
        
        r.agregar("Activo", true);
        r.agregar("Monto_Diario", comando.getMontoDiario() );
        r.agregar("Nro_Dias", comando.getNroDias() );

        //GUARDANDO LAS PARTIDAS
        Statement st = null;
        try {
            st = con.createStatement();            
            String sql = "select * from Campo_Conglomerado_Personal_Detalle "
                    + r.getWhereClaveSql();
            
            ResultSet rs = st.executeQuery(sql);            
            SentenciaSql s;
            if(rs.next()) {
                s = new SentenciaSql(TipoSentenciaSql.UPDATE, r);
            }
            else {
                s = new SentenciaSql(TipoSentenciaSql.INSERT, r);
            }
            
            st.executeUpdate(s.getSql());            
        } finally {            
            if(st!=null) st.close();
        }
    } 

    
   
    
}
